/**
 *	@file	fld_mushitori.h
 *	@brief	虫取り大会専用フィールドオーバーレイソース(field_tradeとかと平行)
 *	@author	Miyuki Iwasawa
 *	@date	09.03.04
 */

#ifndef __H_FLD_MUSHITORI_H__
#define __H_FLD_MUSHITORI_H__

#include "field/encount_set.h"

#define MUSHITORI_TIME_MAX			(20)	//時間制限(分)
#define MUSHITORI_TRAINER_POKE_MAX	(8)		//ライバルトレーナーが持つポケモンデータの数
#define MUSHITORI_TRAINER_MAX		(10)	//ライバルトレーナーデータの数
#define MUSHITORI_ENEMY_MAX			(5)		//大会にエントリーするライバルトレーナーの数
#define MUSHITORI_ENTRY_MAX			(MUSHITORI_ENEMY_MAX+1)	//大会にエントリーするトレーナー総数(プレイヤー込み)
#define MUSHITORI_ENC_POKE_NUM		(10)	//虫取り大会エンカウントテーブルのポケモン数

///虫取り大会トレーナーポケモンデータ
typedef struct _MUSHITORI_POKE{
	u8	type;
	u8	week;
	u16	monsno;
	u16 point;
	u16	revision;
}MUSHITORI_POKE;

//虫取り大会エントリートレーナーデータ
typedef struct _MUSHITORI_ENTRY{
	u8	id;
	u16 point;
	MUSHITORI_POKE	poke;
}MUSHITORI_ENTRY;


//大会エンカウントポケモンデータ
typedef struct _MUSHITORI_ENC_POKE{
	u16 monsno;	//モンスターナンバー
	u8	lvMin;	//minレベル
	u8	lvMax;	//maxレベル
	u8	enc_key;	//エンカウントのキー値
	u8	rare;	//レア係数
	u16 dmy;
}MUSHITORI_ENC_POKE;

///虫取り大会ワーク(大会開始から終了までfsys内に確保される)
typedef struct _FLD_MUSHITORI_WORK{
	int heapID;

	SAVEDATA	*save;

	POKEPARTY*	party_s;	//オリジナルパラメータの保存場所
	POKEPARTY*	party_t;	//実際の手持ち
	POKEMON_PARAM* fld_pp;	//フィールド上で保持するポケパラ

	u8	entry_poke;		//参戦する手持ちの位置No保存
	u8	temoti_num;		//手持ちの数
	u8	week;			//現在の曜日
	u8	get_f:1;		//最初の一匹捕まえたかどうか？
	u8	zukan_f:1;		//全国図鑑かどうか？
	u8	my_rank:6;		//自分の順位

	u16	ball_num;		//コンペボールの残り数

	u16	item;			//賞品アイテム
	u32	time;			//経過時間保存

	MUSHITORI_ENC_POKE	enc_tbl[MUSHITORI_ENC_POKE_NUM];
	MUSHITORI_ENTRY entry[MUSHITORI_ENTRY_MAX];
	u8				ranking[MUSHITORI_ENTRY_MAX];
}FLD_MUSHITORI_WORK;


//////////////////////////////////////////////////////////////////////////////
///fld_mushitori_st.c 常駐
/**
 *	@brief	虫取りワークへのポインタを取得する
 */
extern FLD_MUSHITORI_WORK* MushitoriSysSt_GetWorkPointer(FIELDSYS_WORK* fsys);

/*
 *	@brief	現在の残りボール数格納ワークへのポインタを返す
 */
extern u16* MushitoriSysSt_GetBallNumPointer(FLD_MUSHITORI_WORK* wk);

/**
 *	@brief	大会の経過時間監視
 */
extern void MushitoriSysSt_UpdateTimeCounter(FIELDSYS_WORK* fsys,s32 diff_minute);

/**
 *	@brief	閉会式会場ロケーションをセット
 */
extern void EventCmd_MushitoriCeremonyLocationSet(GMEVENT_CONTROL* event,FIELDSYS_WORK* fsys);

//-----------------------------------------------------------------------------
/**
 * @brief	イベント擬似コマンド：虫さん選択アプリ呼び出し
 * @param	event		イベント制御ワークへのポインタ
 */
//-----------------------------------------------------------------------------
extern void EventCmd_BugSelect(GMEVENT_CONTROL * event,POKEMON_PARAM* btl_pp);

//////////////////////////////////////////////////////////////////////////////
///fld_mushitori.c field_mushitoriオーバーレイ
/**
 *	@brief	虫取り大会システムワーク初期化
 */
extern FLD_MUSHITORI_WORK* MushitoriSys_Init(FIELDSYS_WORK* fsys,u16 week);

/**
 *	@brief	虫取り大会ワーク解放
 */
extern void MushitoriSys_End(FLD_MUSHITORI_WORK* wk);

/**
 *	@brief	虫取り大会評価
 */
extern void MushitoriSys_Rating(FLD_MUSHITORI_WORK* wk);

/**
 *	@brief	指定順位のデータをバッファ展開
 */
extern void MushitoriSys_RankingDataBufSet(FLD_MUSHITORI_WORK* wk,const MSGDATA_MANAGER * msgman,WORDSET* wset,u8 rank);

/**
 *	@brief	指定したナンバーのトレーナーがエントリーしているか？
 */
extern BOOL MushitoriSys_TrainerEntryCheck(FLD_MUSHITORI_WORK* wk,u8 entry_id);

/**
 *	@brief	捕まえたポケモンを手持ちorボックスに追加&捕まえたポケモンのニックネーム展開
 *
 *	@retval	TRUE:ボックス転送した
 */
BOOL MushitoriSys_CapturePokePush(FLD_MUSHITORI_WORK* wk,WORDSET* wset,u8 buf_id);

/*
 *	@brief	虫取り大会のエンカウントテーブルをアロケーションして取得する
 *
 *	＊呼び出し側が利用後に解放すること！
 */
extern ENC_COMMON_DATA* MushitoriSys_AllocEncountTbl( FLD_MUSHITORI_WORK* wk,int heapID);

#endif	//__H_FLD_MUSHITORI_H__
